查看原文
其他

社区版Inceptor常见问题整理

2017-12-01 Coda6 大数据开放实验室

在初次接触Inceptor的时候,很多用户会对某些基本概念持有疑问,或者在使用的过程中遇到一些问题。本文针对这些待解决的问题,整理出常见的Q&A,希望能够为读者答疑解惑。

另外,社区版TDH已经在腾讯云市场正式上线,可以在腾讯云上直接安装“星环一站式大数据平台(Transwarp Data Hub)社区版”(https://market.cloud.tencent.com/products/3985)。点击文末的“阅读原文”将跳转至对应安装页面。

Inceptor Q&A

Inceptor是什么?

Inceptor基于Hadoop技术平台打造,是高效的批处理分析型数据库,可以有效解决大规模数据处理和分析的多种技术难题。社区版Inceptor完整支持SQL 2003标准,提供标准JDBC/ODBC连接支持,从而方便对接第三方软件。

Inceptor的使用手册在哪里获取?

请访问星环在线手册服务Transpedia(https://docs.transwarp.cn/)。

Inceptor的交互方法?

Inceptor使用Beeline作为命令行工具,让远程客户端向Inceptor提交请求并获取结果。

执行下面指令进入Inceptor交互界面:

beeline -u "jdbc:hive2://<inceptor_server>:10000/<database_name>"

<inceptor_server>可以是服务器ip或者hostname。

如何创建一张表并实现查询?

这里将提供Inceptor建表与查询的快速入门。

进入beeline交互界面后执行下述语句创建一张表:

CREATE TABLE quickstart (a INT, b STRING) ;

将位于HDFS上的数据导入表中:

LOAD DATA INPATH '/tmp/quickstart.txt' OVERWRITE INTO TABLE quickstart;

查看表中的数据(仅列出前面10行):

SELECT * FROM quickstart limit 10;

执行SQL语句时出错应该如何处理?

通过返回的报错信息和错误码,查询Transpedia(https://docs.transwarp.io/)的《Inceptor错误代码与信息查询手册》,了解相应的报错原因并获得解决方法。

社区版Inceptor支持哪些类型的表?

社区版Inceptor的表按不同维度可以划分为不同种类:

  • 按Inceptor的所有权可分为:外部表(或简称为外表)和托管表。

  • 按表的存储格式分类可分为:TEXT表、ORC表、CSV表。

  • 按表是否分区可分为:分区表和非分区表。

  • 按表是否分桶可分为:分桶表和非分桶表。

什么是外表和托管表?

Inceptor对外表不具有所有权,创建外表时会创建元数据,但是不会重新生成数据。删除外表时,仅会删除元数据,不会删除数据。不适合做统计分析,适合查询。通过CREATE EXTERNAL TABLE创建。

Inceptor对内表具有所有权,创建内表不仅创建元数据,同时还会创建一份新的数据。删除内表时,不仅会删除元数据,还会删除表中的数据。通过CREATE TABLE创建。

分区时要注意什么?

建议采用范围分区的方式分区而不是单值分区。

建议选择日期字段或地区字段为分区字段,这样通常可以适应业务需求同时保证适当的分区大小。

不推荐使用二级分区。

分区数控制在0-200个,最大不要超过200个分区。

建议单个分区内桶的数目略小于Inceptor配置的CPU数目。

设计一个分区数据时,尽量确保一轮CPU能处理完所有数据。

建议单个分区分桶数在500个以内,分区数和分桶数的乘积在10000以内。

分桶时要注意什么?

分桶字段尽量选择选值域均匀重复率不高的字段,如主键。

分桶生成文件后应该检查最大桶的文件大小,尽量避免数据倾斜。

单个桶压缩前小于1000MB,通常记录数小于1000w。

由于分桶数不能随着数据的增加而增加,所以有数据增量的表需要同时进行分区与分桶。

beeline中为什么无法显示Table完整字段的数据?

可能是因为表中数据的宽度超出了beeline的默认显示宽度,可以通过传递下面两个参数调整可显示宽度:

  • maxWidth:可显示的最大总宽度,单位:字符数。

  • maxColumnWidth:每个字段可显示的最大宽度,单位:字符数。

例如下述语句:

# 连接Server并将beeline可显示最大宽度设置为1500个字符,每个字段最长可以显示1500个字符。

beeline -u jdbc:hive2://localhost:10000/default --maxWidth=1500 --maxColumnWidth=1500

Inceptor的执行模式?

支持Local和Cluster两种执行模式。Cluster适用于批处理业务,Local模式适用于低延时、高并发、参与计算数据量少的场景。

通过参数ngmr.exec.mode进行切换,该参数支持两个取值:local和cluster(默认)。

出现报错Address already in use service SparkUI failed after 0 retries,应该怎么处理?

机器的4040端口被占用,因为TDH需要将该端口分配给Inceptor UI,所以请释放占用。

启动时出现报错could not create serversocket on address 0.0.0.0/0.0.0.0:10000,应该怎么处理?

机器的10000端口被占用,因为TDH需要将该端口分配给Inceptor Server,所以请释放占用。

Manager上Inceptor提示some executor are not started,同时查看4040页面发现只有部分Executors被启动,应该如何处理?

导致这种情况出现的原因通常是,当前可用的CPU或者内存少于启动Executor需要的资源,不足以启动。

例如,查看日志/var/log/inceptorsql1/hive-server2.log发现,节点启动Executor需要2384M,4个core,但是当前可用的资源仅为4096M,3个vcore,所以导致该节点的Executor无法启动。

解决方法:

如果可以的话请释放资源。如果资源无法释放,但同时希望Inceptor可以正常运行,请用如下方式解决。

首先在Manager界面的YARN的服务配置项中,通过以下两个参数确认YARN可以分配给Container的CPU个数和内存大小。

  • yarn.nodemanager.resource.cpu-vcores

  • yarn.nodemanager.resource.memory-mb

然后结合上述两个参数的大小,在Transwarp Manager上的Inceptor资源分配页面调整Inceptor Executor的资源设置,减少启动Executor所需的内存和内核数(需分别不大于上面两个参数),从而满足启动要求。 

如何对表的列进行增加、删除和修改?

增加列:

ALTER TABLE [table] ADD COLUMNS ([column] [datat_type], [column] [data_type], ...);

删除列:

ALTER TABLE [table] DELETE COLUMNS ([column1], [column2], ...);

重命名列:

ALTER TABLE [table] CHANGE COLUMN [old_column_name] [new_column_name] [data_type];

如何查看SQL语句执行计划?

执行EXPLAIN语法,例如:

EXPLAIN SELECT * FROM table1;

如何将原集群中的表迁移到新的集群?

第一步:进入旧集群,登录Inceptor,查看数据库,找到待迁移的表,执行语句:

show create table <dest_tbl>;

该语句返回目标表的建表语句,请记录该结果。

第二步:在旧集群中确定目标数据库<dest_db>和目标表<dest_tbl>位于HDFS的位置,可以通过执行下述命令一层层展开目录找到目标。

sudo -u hdfs hdfs dfs -ls /<dir>

第三步:在新的集群登录Inceptor,建立新的数据库。

第四步:通过Manager确定两套集群的HDFS NameNode的active节点。

执行下述命令将原集群中的表拷贝到新集群的正确数据库下:

hadoop distcp hdfs://<Active NameNode1 ip>:8020/path/to/<dest_tbl> hdfs://<Active NameNode2 ip>:8020/path/to/<dest_db>

第五步进入新集群的Inceptor,用通过第一步获得的建表语句,创建新表即可。

如果目标表是分区表,还需要手动挂载分区,在beeline中执行形如下面所示的SQL语句:

alter table [表名] add partition (<p_key>='<p_value>')

location <hdfs_partition_address>;

其中<p_key>是分区键,<p_value>是分区值。

CSV文件导入Inceptor时,如何消除引用符号,例如双引号(")?

数据示例:

"1","alex","dba"

"2","james","dba"

采用下面的建表语句,通过设置quote.delim属性,可以在数据导入Inceptor时消除双引号:

drop table csv_table;

create external table csv_table(col1 string,col2 string,col3 string)

stored as csvfile

location '/temp/csv/data'

tblproperties('field.delim'=',', 'quote.delim'='"', 'line.delim'='\n');

quote.delim属性用于指定作为quote_delimiter的字符,默认值为“"”。

这个字符的作用为:如果字段本身包含了分隔符、换行符或者NULL值字符作为数据的一部分,将该字段放在两个quote_delimiter字符之间则可以让Inceptor将字段内部出现的分隔符和换行符作为数据的一部分处理。

关于其他问题

本文列举的都是关于Inceptor的比较常见的问题。对于其他任何问题,欢迎登录星环论坛(http://support.transwarp.cn)进行查询或者提供反馈,或者邮件联系support@transwarp.io。


往期原创文章

社区版TDH常见运维问题总结

如何在TDH社区版中进行服务升级

社区版TDH官方正式发布

Waterdrop的许可证申请

Search SQL:用于全文检索的SQL扩展(二)

Search SQL:用于全文检索的SQL扩展(一)

Guardian 5.0全新架构解析:大数据安全防御之盾(二)

Guardian 5.0全新架构解析:大数据安全防御之盾(一)




大数据开放实验室由星环信息科技(上海)有限公司运营,专门致力于大数据技术的研究和传播。若转载请在文章开头明显注明“文章来源于微信订阅号——大数据开放实验室”,并保留作者和账号介绍。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存